/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.socialfun.controladores;

import com.ec.socialfun.datamanager.ActualizarDatosUsuarioDataManager;
import com.ec.socialfun.datamanager.ComunDataManager;
import com.ec.socialfun.entidades.Ciudad;
import com.ec.socialfun.entidades.Usuario;
import com.ec.socialfun.entidades.Zona;
import com.ec.socialfun.excepciones.ActualizarDatosUsuarioException;
import com.ec.socialfun.servicios.UsuarioFacade;
import com.ec.socialfun.servicios.externos.FtpServicio;
import java.io.IOException;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;
import org.jboss.logging.Logger;
import org.primefaces.event.FileUploadEvent;

/**
 *
 * @author hp
 */
@ManagedBean
@RequestScoped
public class ActualizarDatosUsuarioControlador extends PadreControlador {

    private static final Logger LOG = Logger.getLogger(ActualizarDatosUsuarioControlador.class.getName());
    @EJB
    private UsuarioFacade usuarioFacade;
    @EJB
    private FtpServicio ftpServicio;
    @ManagedProperty(value = "#{actualizarDatosUsuarioDataManager}")
    private ActualizarDatosUsuarioDataManager actualizarDatosUsuarioDataManager;
    @ManagedProperty(value = "#{comunDataManager}")
    private ComunDataManager comunDataManager;

    /**
     * Creates a new instance of ActualizarDatosUsuarioControlador
     */
    public ActualizarDatosUsuarioControlador() {
        
      
    }

    @Override
    public void iniciarDatos() {
        try {
            Usuario usuario = usuarioFacade.recuperaUsuarioPorMail(obtenerUsuarioLogeado());
            getActualizarDatosUsuarioDataManager().setCiudad(usuario.getZoCodigo().getCiCodigo());
            getActualizarDatosUsuarioDataManager().setPais(usuario.getZoCodigo().getCiCodigo().getPaCodigo());
            getActualizarDatosUsuarioDataManager().setUsuario(usuario);
        } catch (Exception e) {
            LOG.error("Error al iniciarDatos " + e);
        }
    }

    public void subirFoto(FileUploadEvent event) {
        try {
            LOG.info("event.getFile().getFileName() " + event.getFile().getFileName());
            getActualizarDatosUsuarioDataManager().getArchivo().setNombre(event.getFile().getFileName());
            getActualizarDatosUsuarioDataManager().getArchivo().setInputStream(event.getFile().getInputstream());
            getActualizarDatosUsuarioDataManager().getArchivo().setCodigo(getActualizarDatosUsuarioDataManager().getUsuario().getUsCodigo());
            String ruta = ftpServicio.subeImagenAFtp(getActualizarDatosUsuarioDataManager().getArchivo());
            LOG.info("ruta = " + ruta);
            getActualizarDatosUsuarioDataManager().getUsuario().setUsImagen(ruta);
        } catch (IOException e) {
            LOG.error("Error al subir foto " + e);
            this.mensajeError("Error al subir Imagen");
        } catch (Exception e) {
            LOG.error("Error inesperado al subir foto " + e);
            this.mensajeError("Error inesperado al subir Imagen");
        }
    }

    public void guardarActualizacion() {
        try {
            Usuario usuario = usuarioFacade.actualizaDatosDeUsuario(getActualizarDatosUsuarioDataManager().getUsuario());
            getComunDataManager().setUsuario(usuario);
            this.mensajeExitoso("Actualizacion realizada correctamente");
        } catch (ActualizarDatosUsuarioException e) {
            this.mensajeError("Error al realizar la actualizacion");
        }
    }

    public List<SelectItem> getSelectItemCiudad() {
        List<SelectItem> lista = getSelectItemPorDefecto();
        if (getActualizarDatosUsuarioDataManager().getPais() != null && getActualizarDatosUsuarioDataManager().getPais().getPaCodigo() != null) {
            List<Ciudad> listaCiudad = ciudadFacade.recuperaPorPais(getActualizarDatosUsuarioDataManager().getPais());
            for (Ciudad ciudadTmp : listaCiudad) {
                lista.add(new SelectItem(ciudadTmp, ciudadTmp.getCiNombre()));
            }
        }
        return lista;
    }

    public List<SelectItem> getSelectItemZona() {

        List<SelectItem> lista = getSelectItemPorDefecto();
        if (getActualizarDatosUsuarioDataManager().getCiudad() != null && getActualizarDatosUsuarioDataManager().getCiudad().getCiCodigo() != null) {

            List<Zona> listaZona = zonaFacade.recuperaPorCiudad(getActualizarDatosUsuarioDataManager().getCiudad());
            for (Zona zonaTmp : listaZona) {
                lista.add(new SelectItem(zonaTmp, zonaTmp.getZoNombre()));
            }
        }

        return lista;
    }

    public void limpiarCiudad() {
        getActualizarDatosUsuarioDataManager().setCiudad(null);
    }

    public ActualizarDatosUsuarioDataManager getActualizarDatosUsuarioDataManager() {
        return actualizarDatosUsuarioDataManager;
    }

    public void setActualizarDatosUsuarioDataManager(ActualizarDatosUsuarioDataManager actualizarDatosUsuarioDataManager) {
        this.actualizarDatosUsuarioDataManager = actualizarDatosUsuarioDataManager;
    }

    public ComunDataManager getComunDataManager() {
        return comunDataManager;
    }

    public void setComunDataManager(ComunDataManager comunDataManager) {
        this.comunDataManager = comunDataManager;
    }
    
    
}
